<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function fn(...args) {
            let num=0
            num = args.reduce((p, c) => p + c, 0)
            const temp = (...args) => {
                num = args.reduce((p, c) => p + c, num)
                return temp
            }
            temp.toString=function(){
                return num
            }
            return temp
        }
        //将参数相加，如果多次调用需要返回一个函数，继续调用，直到不在调用这个函数的返回值便是这次调用表达式的返回值结果，然后再打印的时候会将函数toString隐式转换，最后在alert打印的时候会执行重写后的toString方法，将引用的num变量返回打印，num在闭包里
        alert(fn(1,2)(3,4)(5,6)(7,8)) 
    </script>
</body>

</html>